package com.SouthernWall_404.AgeSuitcase.Common.API;

import com.SouthernWall_404.AgeSuitcase.Common.AgeSuitcase;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.TagParser;
import net.minecraftforge.fml.loading.FMLPaths;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

public class StorageAPI {

    /**
     * 获取游戏根目录路径
     * @return 游戏根目录的Path对象
     */
    public static Path getGameDirectory() {
        return FMLPaths.GAMEDIR.get();
    }

    /**
     * 将NBT数据保存到游戏根目录的文件中
     * @param nbtData 要保存的NBT数据
     * @param fileName 文件名（可以包含子目录路径）
     * @return 是否成功保存
     */
    public static boolean saveNBTToRoot(CompoundTag nbtData, String fileName) {
        try {
            // 获取游戏根目录
            Path gameDir = getGameDirectory();

            // 构建完整文件路径
            Path filePath = gameDir.resolve(AgeSuitcase.MODID+"/"+fileName +".json");
            File nbtFile = filePath.toFile();

            // 确保父目录存在
            File parentDir = nbtFile.getParentFile();
            if (parentDir != null && !parentDir.exists()) {
                parentDir.mkdirs();
            }

                // 将NBT转换为SNBT（字符串NBT格式，类似JSON）
            String snbt = nbtData.toString();

            // 写入文件
            java.io.FileWriter writer = new java.io.FileWriter(nbtFile);
            writer.write(snbt);
            writer.close();

            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 从游戏根目录的文件读取NBT数据
     * @param fileName 文件名（可以包含子目录路径）
     * @return 读取的NBT数据，如果文件不存在则返回空CompoundTag
     */
    public static CompoundTag loadNBTFromRoot(String fileName) {
        try {
            // 获取游戏根目录
            Path gameDir = getGameDirectory();

            // 构建完整文件路径
            Path filePath = gameDir.resolve(AgeSuitcase.MODID+"\\"+fileName +".json");
            File nbtFile = filePath.toFile();

            // 检查文件是否存在
            if (!nbtFile.exists()) {
                return new CompoundTag(); // 返回空的NBT
            }

                java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(nbtFile));
                StringBuilder content = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    content.append(line);
                }
                reader.close();

                // 从SNBT解析为CompoundTag
                try {
                    return TagParser.parseTag(content.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                    return new CompoundTag();
                }
        } catch (Exception e) {
            e.printStackTrace();
            return new CompoundTag(); // 出错时返回空的NBT
        }
    }

    public static List<String> loadStringFromRoot(String fileName) {
        try {
            // 获取游戏根目录
            Path gameDir = getGameDirectory();

            // 构建完整文件路径
            Path filePath = gameDir.resolve(AgeSuitcase.MODID+"\\"+fileName +".json");
            File nbtFile = filePath.toFile();

            // 检查文件是否存在
            if (!nbtFile.exists()) {
                return List.of(); // 返回空的NBT
            }

            java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(nbtFile));
            List<String> content=new ArrayList<>();
            String line;
            while ((line = reader.readLine()) != null) {
                content.add(line);
            }
            reader.close();

            // 从SNBT解析为CompoundTag
            try {
                return content;
            } catch (Exception e) {
                e.printStackTrace();
                return List.of();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return List.of(); // 出错时返回空的NBT
        }
    }

    /**
     * 检查游戏根目录中是否存在指定文件
     * @param fileName 文件名（可以包含子目录路径）
     * @return 文件是否存在
     */
    public static boolean fileExistsInRoot(String fileName) {
        Path gameDir = getGameDirectory();
        Path filePath = gameDir.resolve(AgeSuitcase.MODID+"\\"+fileName +".json");
        return filePath.toFile().exists();
    }

    /**
     * 删除游戏根目录中的指定文件
     * @param fileName 文件名（可以包含子目录路径）
     * @return 是否成功删除
     */
    public static boolean deleteFileFromRoot(String fileName) {
        Path gameDir = getGameDirectory();
        Path filePath = gameDir.resolve(fileName +".json");
        return filePath.toFile().delete();
    }

    /**
     * 获取游戏根目录中指定文件的完整路径
     * @param fileName 文件名（可以包含子目录路径）
     * @return 文件的完整路径字符串
     */
    public static String getFilePathInRoot(String fileName) {
        Path gameDir = getGameDirectory();
        Path filePath = gameDir.resolve(fileName +".json");
        return filePath.toString();
    }

}
